//! https://leetcode-cn.com/problems/min-cost-climbing-stairs/
//! 746. 使用最小花费爬楼梯
//! 数组的每个索引作为一个阶梯，第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。
//! 每当你爬上一个阶梯你都要花费对应的体力花费值，然后你可以选择继续爬一个阶梯或者爬两个阶梯。
//! 您需要找到达到楼层顶部的最低花费。在开始时，你可以选择从索引为 0 或 1 的元素作为初始阶梯。
pub struct Solution {}

#[allow(dead_code)]
impl Solution {
    pub fn min_cost_climbing_stairs(cost: Vec<i32>) -> i32 {
        cost.into_iter()
            .fold((0, 0), |s, x| ((s.1).min(s.0 + x), s.0 + x))
            .0
    }
}

#[cfg(test)]
mod test {
    #[test]
    fn test() {
        assert_eq!(
            super::Solution::min_cost_climbing_stairs(vec![10, 15, 20]),
            15
        );
        assert_eq!(
            super::Solution::min_cost_climbing_stairs(vec![1, 100, 1, 1, 1, 100, 1, 1, 100, 1]),
            6
        );
    }
}
